package com.ruangong.GitClient.Test.GitHubAPITest;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.ruangong.GitClient.GitHubAPI.GitHubFile;
import com.ruangong.GitClient.GitHubAPI.GitHubRepository;
import com.ruangong.GitClient.GitHubAPI.GitHubUser;
import com.ruangong.GitClient.GitHubAPI.MoMingUtil;

import java.lang.reflect.Type;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.List;

/**
 * 用于测试GitHub API的搜索功能。
 * 可以根据Open API的URL获取仓库的基本信息。
 * 根据仓库的内容把仓库的内容全都打印出来。
 */

public class Test {
    public static void main(String[] args) throws Exception {
//        String TOKEN = "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";
        String TOKEN = "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";
        GitHubUser gitHubUser = new GitHubUser(TOKEN);
        gitHubUser.showInfo();
//        GitHubRepository repo = GitHubRepository.fromJson(MoMingUtil.REPOSITORY_TEST_JSON);
        GitHubRepository repo = GitHubRepository.fromJson(MoMingUtil.getRepositoryInfo("SilverXQI", "Silver"));
        URL url = new URL(repo.getContents_url());
        System.out.println(url);
        HttpURLConnection conn = MoMingUtil.createConnection(url);
        conn.setRequestProperty("Accept", "application/vnd.github.v3+json");
        if (conn.getResponseCode() != 200) {
            throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
        }

        String jsonInput = MoMingUtil.getHttpURLConnectionContent(conn);
        Type listType2 = new TypeToken<List<GitHubFile>>() {
        }.getType();
        List<GitHubFile> files = new Gson().fromJson(jsonInput, listType2);
        printFileContent(files);

        conn.disconnect();

        for (GitHubFile file : files) {
            if (file.getType().equals("file")) {
                file.showFileContent();
            } else if (file.getType().equals("dir")) {
                file.showDir();
                System.out.println(file.getName());
            }
        }

    }

    /**
     * 打印文件列表中每个文件的信息。
     *
     * @param files 包含文件信息的列表。
     */
    private static void printFileContent(List<GitHubFile> files) {
        System.out.println("-----------------0-----------------");
        // 遍历列表并打印每个文件的信息
        for (GitHubFile file : files) {
            file.showFileInfo();
        }
        System.out.println("-----------------1-----------------");
    }
}


